Repository navigation
UI evaluators: isolated, model-pinned evaluator runs and start_evaluation - #261
Merged
MHohlios merged 4 commits intoNov 4, 2026
Merged
Conversation
added 4 commits
November 4, 2026 06:30
A coordinator starts a blind evaluator with start_evaluation(run_folder, provider, model, effort, mode). Each run is a fresh session of the new evaluator role, outside every agent tree, whose only message is the run folder's prompt.md. Claude runs with no setting sources, an empty strict MCP config, dontAsk and file tools scoped to the folder; Codex runs sandboxed in the folder with no shell, web or MCP, from a Codex home that holds only a link to the human's auth.json, because --ignore-user-config still loads ~/.codex/AGENTS.md. The environment is cleared to a short allowlist, so no WORKSPACE_* variable reaches the run. The model is checked against detection and the provider's listed models and pinned; at a usage limit the run waits for the reset and never falls back. The human allows evaluators per project through an Inbox card or set_evaluator_permission; closing the project turns them off. Desktop runs are refused until the desktop driver, but share one queue and screen lock. When a run ends its coordinator gets only its id, state, folder and duration. list_evaluations and stop_evaluation complete the tools, and the human can stop any run.
A model is now checked only against its CLI's own list, full IDs such as claude-opus-5-5 and aliases alike. When the list has not been read yet, start_evaluation refuses with that reason and the service reads it, so a repeated call succeeds. Each run records the model its provider names: Claude's from its start record, Codex's from the turn_context of its session record in the evaluator's Codex home, since its JSON stream names none. A run started on a full ID whose provider names another model fails at once, with the reason for the human. list_evaluations and the end message show the reported model. The design records that Codex 0.160.0 rewrites auth.json in place on a token refresh: a probe with a throwaway home, a fake stale token behind a link and a local token endpoint kept the link and the target's inode, so the evaluator home's link to the human's auth.json stays safe.
… from Codex A run whose turn a crash, kill or long quit cut short now fails when the host next starts, "Wiffletree stopped during the run.", and its coordinator gets the end message, as job runs are ended. A run whose prompt is still queued, or that waits for its limit's reset, goes on. A separate CODEX_HOME still let Codex find the human's skills under ~/.agents/skills: a request captured by a local endpoint carried them, and neither skip_host_skill_discovery nor turning off skill_search removed them. The evaluator's Codex now runs with an empty HOME beside its Codex home; only Codex's bundled system skills remain. The live isolation tests now also check that none of the human's skill names reach a run. The desktop skills view expects the coordinator core's v16.
MHohlios
deleted the
wiffletree/ui-evaluators-isolated-model-pinned-evaluator-ru
branch
November 4, 2026 15:26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This is the foundation of UI evaluators, the first of four stacked PRs for the OpenSpec change
ui-evaluators, whose approved mockup is inopenspec/changes/ui-evaluators/ui/mockups.html. A coordinator can now start a blind evaluator run on one exact model, with only a prompt and a run folder. It is woken with one short line when the run ends. The app driver and the desktop driver come in the stacked PRs that follow.evaluationstable. A run belongs to a project, never to a ticket or worktree. Every run starts a fresh session, which is archived when it ends.prompt.md.-p,--setting-sources "", a strict empty MCP config,dontAsk,Read,Glob,Grep,Write,Editlimited to the folder, and auto memory off.exec --ignore-user-config --ignore-ruleswith a workspace-write sandbox at the folder, no network and no web search. It gets its ownCODEX_HOME, which holds only a link toauth.json, and an emptyHOME, so neither~/.codex/AGENTS.mdnor the user's skills reach it.WORKSPACE_*variable passes through.start_evaluation,list_evaluationsandstop_evaluation. Refusals name the reason. The end message is onlyRun <id> <state> · model <m> · folder <f> · <N min>.Decisions
auth.jsonin place on a token refresh, so linking it from the evaluator's Codex home is safe. This was checked with a probe using fake tokens and a local refresh endpoint; details are indesign.md.How it was tested
cargo fmt --checkandcargo clippy --workspace --all-targets -D warningsare clean.cargo test --workspace: 2557 tests pass.tests/evaluator_isolation.rsran against the real Claude and Codex CLIs. Neither saw the user's CLAUDE.md, AGENTS.md or skills, and neither could write outside its folder.Follow-ups
ANTHROPIC_API_KEY,CLAUDE_CONFIG_DIR,HTTPS_PROXY), so a run could fail to start where they are needed (crates/workspace-host/src/provider/evaluator.rs:20).Reviewed with Wiffletree: 1 full review and 0 re-checks, 2 rounds (Tests, Claude, Codex, Style)
🤖 Generated with Claude Code